<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Type extends Model
{
	/**
     * 一对多关联文章
     */
    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
	
	/**
	 * 获取排序好的栏目分类 01
	 */
	public function getType()
	{
		//
		$data = $this->orderBy('parent_id','desc')->orderBy('weight', 'desc')->get();

		foreach($data as $v){
			if($v->parent_id != 0){
				$tmp = explode(',', $v->path);
				$num = count($tmp) - 1;
				$v->name = str_repeat("|________", $num) . $v->name;
			}
		}
		return $data;
	}

	/**
	 * @return array 排列好的栏目列表
	 */
	public function typeTree($data)
	{
		$data = json_decode(json_encode($data), true);
		return $this->reSort($data);
	}
	/**
	 * @param $data 栏目资源
	 * @param int $paren_tid 父级栏目
	 * @param int $level 等级
	 * @return array 排列好的栏目数据
	 */
	public function reSort($data,$paren_tid=0,$level=0)
	{
		//先找出顶级栏目，然后同过id去找自己的子集
		static $arr = array();
		foreach($data as $k => $v){
			if ($v['parent_id'] == $paren_tid) {
				$v['level'] = $level;
				$arr[] = $v;
				$this->reSort($data,$v['id'],$level+1);
			}
		}
		return $arr;
	}

	/**
	 * 前台获取导航栏目
	 * @return mixed
	 */
	public function getNavi()
	{
		$data = $this->where("is_show", 1)->orderBy('id', 'desc')->get();
		$data = json_decode(json_encode($data), true);
		return $this->getListType($data);
	}

	/**
	 * @return array|string 权限多维数组分类
	 */
	public function getListType($data)
	{
		if($data){
			foreach($data as $k => $v){
				$data2[$v['id']] = $v;
			}
			return $this->getTypeTree($data2);
		} else {
			return "";
		}
	}
	/**
	 * @param $items 原始二维数组
	 * @return array 分好类的二维数组
	 */
	public function getTypeTree($items){
		$tree = array();
		foreach($items as $item){
			//判断是否为顶级权限
			if(isset($items[$item['parent_id']])){
				// 判断当前数据是否为顶级，不是顶级就放在它【复制一份】到上级分类的数据里面，这就是为什么用 & 的原因
				$items[$item['parent_id']]['son'][] = &$items[$item['id']];
			}else{
				$tree[] = &$items[$item['id']];
			}
		}
		return $tree;
	}
}
